//#define _crt_secure_no_warnings 1
//#include <stdio.h>
//#include <stdlib.h>
//int int_cmp(const void* p1, const void* p2)
//{
//	return (*(int*)p1 - *(int*)p2);
//}
//int main()
//{
//	int arr[] = { 1,3,5,7,9,2,4,6,8,0 };
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	qsort(arr, sz, sizeof(arr[0]), int_cmp);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d", arr[i]);
//	}
//	printf("\n");
//	return 0;
//}
//struct Stu
//{
//	char name[20];
//	int age;
//};
//int cmp_stu_by_age(const void* e1, const void* e2)
//{
//	return ((struct Stu*)e1)-> age - ((struct Stu*)e2) ->age;
//}
//int cmp_stu_by_name(const void* el, const void* e2)
//{
//	return strcmp(((struct Stu*)el)->name, ((struct Stu*)e2)->name);
//}
//void test2()
//{
//	struct Stu s[] = { { "zhangsan",20 }, { "lisi",30 }, { "wangwu",15 } };
//	int sz = sizeof(s) / sizeof(s[0]);
//	qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
//}
//void test3()
//{
//	struct Stu s[] = { { "zhangsan",20 }, { "lisi",30 }, { "wangwu",15 } };
//	int sz = sizeof(s) / sizeof(s[0]);
//	qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
//}
//int main()
//{
//	test2();
//	test3();
//	return 0;
//int int_cmp(const void* p1, const void* p2)
//{
//	return (*(int*)p1 - *(int*)p2);
//}
//void swap(void* p1, void* p2, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		char temp = *((char*)p1 + i);
//		*((char*)p1 + i) = *((char*)p2 + i);
//		*((char*)p2 + i) = temp;
//	}
//}
//void bubble(void* base, int count, int sz, int(*cmp)(void*, void*))
//{
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < count - 1; i++)
//	{
//		for (j = 0; j < count - i - 1; j++)
//		{
//			if (cmp((char*)base + j * sz, (char*)base + (j + 1) * sz) > 0)
//			{
//				swap((char*)base + j * sz, (char*)base + (j + 1) * sz,sz);
//			}
//		}
//	}
//}
//int main()
//{
//	int arr[] = { 1,3,5,7,9,2,4,6,8,0 };
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	bubble(arr, sz, sizeof(arr[0]), int_cmp);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d", arr[i]);
//	}
//	printf("\n");
//	return 0;
//}